COVID-19 Implications on Mental Health in the U.S.

Within the United States, the rise of remote learning has called for additional attention on students’ mental health as they experience a lack of social interaction, less direct support from teachers, and difficulty focusing at home. Aside from academics, the mental well-being of all youth in general has also been negatively affected as children and their families are asked to self-quarantine and in some cases, leave their jobs. Health experts are now concerned about the mental health conditions for our youth in the long run. They believe that experiencing and living in these tough situations for an extended amount of time can cause children to have anxiety and depression which is why we need to start paying close attention to negative impacts of COVID-19 on mental health. For more information regarding this issue, you may read the article provided in this link.

Implications in India

As Americans, we have seen and experienced the pandemic’s implications on mental health within the United States, but it leaves us quite curious about the present circumstances elsewhere. While searching for new research and data sets, we stumbled upon a relatively recent research done in Delhi, the capital territory of India. Data was also collected from subjects living in the National Capital Region (NCR) which encompasses both Delhi and its surrounding area. In this study, researchers looked at different age-groups of a total of 1,182 subjects, ages ranging from 7 to 59 years old, and how several aspects of their lives were affected after the lockdown. Additionally, they recorded the different coping mechanisms adopted due to such sudden changes. The various variables such as learning hours for online classes and self-study, duration of sleep, time spent on fitness and sleep were recorded and analysed as factors related to mental health. Although the effect on students’ education, social life, physical health, and mental well-being was expected, this research suggests that the public should take necessary measures to prevent psychological problems and improve students’ experiences in and outside of academics, for our current results are not meeting the expectations of the initial government policies. For specific details on the demographics, objectives, and methods of this study, please read the research paper linked here.

Although the researchers in this study did a phenomenal job at creating, designing, and interpreting their own plots, we decided to ask different questions and explore our own interests by using the same data set while still acknowledging their remarkable findings.

Demographics:

Before exploring the data set, it's important to first acknowledge that there is indeed a demographic imbalance. Of the 1,182 respondents, the research paper states that 84.3% of those subjects were 7 to 22 years of age with the mean age being 20.16 years old. This bar plot visually demonstrates that most of the data comes from school-age children and teenagers. This imbalance is understandable considering that the aim of this study was to research COVID-19 implications on the education, social life, and mental health of students. However, comparing different variables across multiple age-groups gets quite complicated and can be misleading if not carefully examined.

Respondents by Age Group
Age Respondents Proportion
7-13 92 7.783%
14-18 276 23.350%
19-23 674 57.022%
24-33 91 7.699%
34-45 45 3.807%
46-59 4 0.338%
total 1,182

Just as we observed with the previous plot, the number of respondents per region of residence also differs. This plot displays that there is indeed quite a significant difference between Delhi-NCR respondents and respondents living outside of the Delhi-NCR. Although the online-survey was originally aimed at institutions within the Delhi-NCR region, a significant number of responses from outside of Delhi-NCR was received, for distance-learning regulations forced many students to move out of homes and institutions to reside elsewhere. Of the total number of respondents, 38.3% were living outside of the Delhi-NCR.

This plot compares the median number of hours spent in class by different age groups. For the sole purpose of this study, it is important to draw attention to how many hours students are spending sitting in front of a screen each day. From this plot, we can observe that respondents within the 7-13 and 14-18 age-groups spend the most time in class per day. The researchers emphasized that different variables (time spent on online class, self-study,fitness, sleep, and social media) changes with different age distributions. Average time spent in class and age-group was one of the relationships that were inversely proportional; As age-group value increases, the average number of hours spent online starts to decrease.

Social Media Use, Sleep and Mental Health Outcomes:

In a recent study examining the relationship between sleep and mental health and sleep in college students, researchers found that different mental health symptoms had different patterns of association with poor sleep. They found an association between anxiety and depression symptoms and sleep, but found that mental health conditions only affected certain effects of poor sleep. This study also emphasizes that the effects of poor mental health could be exacerbated by inadequate sleeping hours or poor sleep. Previous research has shown that improving sleep for students may also improve mood. (Becker et al., 2018).

A correlational study from 2018 examined the association of outcomes of social media use in young adults such as general mental health symptoms, loneliness, suicidal thoughts, and a change in empathy, and found that concerns regarding social media use in young adults may be misplaced. Though organizations such as the Royal Society for public health have reported evidence for links between social media use and poor mental health, this particular study did not find proof of an association. This study pointed out the difference between use of social media on mental health effects. If social media was used for negative social comparison this could lead to depression, but that authentic self-presentation could be associated with positive mental health effects. The 2018 study also stated that time spent with social media or exposure alone is not a good indicator of mental health, but instead that how the time was spent is better for analysis and identifying problems (Berryman, Ferguson, and Negy, 2018).

In the graph below we seek to examine the relationship with between time spent on social media per week and time spent sleeping per week as indicators for mental health. Due to the fact that sleep disturbance can often be an indicator or association with poor mental health outcomes, we chose to examine how these two variables interacted, and to see if this differed by age.

For most of the age categories there may be a slight negative association between hours of sleep and hours of social media use. It appears that while hours of sleep go up, hours of social media use may slightly go down. For the age category 19 years - 23 years, there appears to be no association at all between amount of sleep and amount of social media use. In addition, the association is not clear for any age group, leading us to believe that the results from the COVID-19 dataset that we are using most likely follow the trnd that the 2018 study by Berryman, Ferguson, and Negy suggested, which is that there is limited proof between social media and mental health effects. It is also worth noting that difference in amount of time sleeping is not the best indicator of mental health outcomes, and another measurement like an increase anxiety or depression symptoms may be a better indicator that was not included in the data set that we used.

With the pandemic, students are forced to quarantine at home which results in less face-to-face interactions and more time on social media (if it's accessible to them). In the graph below, we used the data set to see if there is a strong relationship between the average time spent on social media per day and whether or not they feel connected to their loved ones. Interestingly, the plot shows that between the different age groups, the results vary, and the average time spent on social media does not exactly determine whether or not there is a connection with loved ones. This can demonstrate that the connections made with loved ones do not merely come from social media interactions, nor are they a result of having to stay home with loved ones everyday. Indeed, that connection can be a result of anything depending on the individual.

Outcomes and Effects of COVID-19:

What Respondents Miss Most
School/college 368
Friends , relatives 213
Travelling 169
Roaming around freely 143
Other 137
Eating outside 99

We were interested to examine what the survey respondents missed the most during the COVID-19 pandemic, and found that throughout the many survey responses, eating outside, friends and relatives, roaming around freely, school/college, and traveling were the most common responses to the question "What do you miss the most?". We observed that most the most common responses were also what we, as college students, missed in the United States. It was interesting that school and/or college was the most common answer, but this answer makes sense when considering the demographics of the responses and the most common ages for response, which was school and college aged people.

Conclusion

-personal experiences --> Maya wrote some above What you miss the most
-connect US and India

LS0tCnRpdGxlOiAiQ09WSUQtMTkgYW5kIHRoZSBJbXBhY3Qgb24gTWVudGFsIEhlYWx0aCBvZiBTdHVkZW50cyIKYXV0aG9yOiAiR2FvY2hhIExlZSwgRWxpemFiZXRoIENhaW4sIE1heWEgRmVybmFuZGV6LCBhbmQgU3RlcGhhbmllIEtvbmFkdS1BY2hlYW1wb25nICIKZGF0ZTogIjMvMTMvMjAyMSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAga2VlcF9tZDogVFJVRQogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0aGVtZTogY29zbW8KLS0tCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQpgYGAKCgpgYGB7ciBsaWJyYXJpZXN9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShtYXBzKSAgICAgICAgICAKbGlicmFyeShnZ21hcCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpICAjIGZvciBjb2xvciBwYWxldHRlcwpsaWJyYXJ5KHNmKSAgICAgICAgICAgICMgZm9yIHdvcmtpbmcgd2l0aCBzcGF0aWFsIGRhdGEKbGlicmFyeShsZWFmbGV0KSAgICAgICAjIGZvciBoaWdobHkgY3VzdG9taXphYmxlIG1hcHBpbmcKbGlicmFyeShnZ3RoZW1lcykgICAgICAjIGZvciBtb3JlIHRoZW1lcyAoaW5jbHVkaW5nIHRoZW1lX21hcCgpKQpsaWJyYXJ5KHBsb3RseSkgICAgICAgICMgZm9yIHRoZSBnZ3Bsb3RseSgpIC0gYmFzaWMgaW50ZXJhY3Rpdml0eQpsaWJyYXJ5KGdnYW5pbWF0ZSkgICAgICMgZm9yIGFkZGluZyBhbmltYXRpb24gbGF5ZXJzIHRvIGdncGxvdHMKbGlicmFyeSh0cmFuc2Zvcm1yKQpsaWJyYXJ5KGdnaW1hZ2UpCmxpYnJhcnkoZ2d0ZXh0KQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShndCkgICAgICAgICAgICAjIGZvciBjcmVhdGluZyBuaWNlIHRhYmxlcwpsaWJyYXJ5KHBhbGV0dGVlcikKdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkKYGBgCgoKYGBge3J9CgpkYXRhc2V0IDwtIHJlYWRfY3N2KCJEYXRhLmNzdiIpICU+JSAKICBtdXRhdGUoQWdlQ2F0ID0gY3V0KEFnZSwgYnJlYWtzID0gYygwLDEzLDE4LDIzLDMzLDQ1LDYwKSwgbGFiZWxzID0gYygiNy0xMyIsICIxNC0xOCIsICIxOS0yMyIsICIyNC0zMyIsICIzNC00NSIsICI0Ni01OSIpKSkgJT4lCiAgbXV0YXRlKGF2Z3NsZWVwID0gbWVhbihTbGVlcCkpICU+JSAKICBtdXRhdGUoU29jaWFsQ2F0ID0gY3V0X251bWJlcihTb2NpYWxNZWRpYSwgbiA9IDMpKQogIAojbGFiZWxzID0gIjAtMSIsICIxLTMiLCAiMy0xMCIgbGFiZWwgc29jaWFsIG1lZGlhIAoKI1ZpZXcoZGF0YXNldCkKCmBgYAoKIyMjICoqQ09WSUQtMTkgSW1wbGljYXRpb25zIG9uIE1lbnRhbCBIZWFsdGggaW4gdGhlIFUuUy4qKgoKV2l0aGluIHRoZSBVbml0ZWQgU3RhdGVzLCB0aGUgcmlzZSBvZiByZW1vdGUgbGVhcm5pbmcgaGFzIGNhbGxlZCBmb3IgYWRkaXRpb25hbCBhdHRlbnRpb24gb24gc3R1ZGVudHPigJkgbWVudGFsIGhlYWx0aCBhcyB0aGV5IGV4cGVyaWVuY2UgYSBsYWNrIG9mIHNvY2lhbCBpbnRlcmFjdGlvbiwgbGVzcyBkaXJlY3Qgc3VwcG9ydCBmcm9tIHRlYWNoZXJzLCBhbmQgZGlmZmljdWx0eSBmb2N1c2luZyBhdCBob21lLiBBc2lkZSBmcm9tIGFjYWRlbWljcywgdGhlIG1lbnRhbCB3ZWxsLWJlaW5nIG9mIGFsbCB5b3V0aCBpbiBnZW5lcmFsIGhhcyBhbHNvIGJlZW4gbmVnYXRpdmVseSBhZmZlY3RlZCBhcyBjaGlsZHJlbiBhbmQgdGhlaXIgZmFtaWxpZXMgYXJlIGFza2VkIHRvIHNlbGYtcXVhcmFudGluZSBhbmQgaW4gc29tZSBjYXNlcywgbGVhdmUgdGhlaXIgam9icy4gSGVhbHRoIGV4cGVydHMgYXJlIG5vdyBjb25jZXJuZWQgYWJvdXQgdGhlIG1lbnRhbCBoZWFsdGggY29uZGl0aW9ucyBmb3Igb3VyIHlvdXRoIGluIHRoZSBsb25nIHJ1bi4gVGhleSBiZWxpZXZlIHRoYXQgZXhwZXJpZW5jaW5nIGFuZCBsaXZpbmcgaW4gdGhlc2UgdG91Z2ggc2l0dWF0aW9ucyBmb3IgYW4gZXh0ZW5kZWQgYW1vdW50IG9mIHRpbWUgY2FuIGNhdXNlIGNoaWxkcmVuIHRvIGhhdmUgYW54aWV0eSBhbmQgZGVwcmVzc2lvbiB3aGljaCBpcyB3aHkgd2UgbmVlZCB0byBzdGFydCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIG5lZ2F0aXZlIGltcGFjdHMgb2YgQ09WSUQtMTkgb24gbWVudGFsIGhlYWx0aC4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIGlzc3VlLCB5b3UgbWF5IHJlYWQgdGhlIGFydGljbGUgcHJvdmlkZWQgaW4gdGhpcyBbbGlua10oaHR0cHM6Ly93d3cud3JpdGluZ2NpdHkuY29tL2hvdy1yZW1vdGUtbGVhcm5pbmctYWZmZWN0cy1zdHVkZW50cy1tZW50YWwtaGVhbHRoLmh0bWwpLgoKIyMgKipJbXBsaWNhdGlvbnMgaW4gSW5kaWEqKgoKQXMgQW1lcmljYW5zLCB3ZSBoYXZlIHNlZW4gYW5kIGV4cGVyaWVuY2VkIHRoZSBwYW5kZW1pY+KAmXMgaW1wbGljYXRpb25zIG9uIG1lbnRhbCBoZWFsdGggd2l0aGluIHRoZSBVbml0ZWQgU3RhdGVzLCBidXQgaXQgbGVhdmVzIHVzIHF1aXRlIGN1cmlvdXMgYWJvdXQgdGhlIHByZXNlbnQgY2lyY3Vtc3RhbmNlcyBlbHNld2hlcmUuIFdoaWxlIHNlYXJjaGluZyBmb3IgbmV3IHJlc2VhcmNoIGFuZCBkYXRhIHNldHMsIHdlIHN0dW1ibGVkIHVwb24gYSByZWxhdGl2ZWx5IHJlY2VudCByZXNlYXJjaCBkb25lIGluIERlbGhpLCB0aGUgY2FwaXRhbCB0ZXJyaXRvcnkgb2YgSW5kaWEuIERhdGEgd2FzIGFsc28gY29sbGVjdGVkIGZyb20gc3ViamVjdHMgbGl2aW5nIGluIHRoZSBOYXRpb25hbCBDYXBpdGFsIFJlZ2lvbiAoTkNSKSB3aGljaCBlbmNvbXBhc3NlcyBib3RoIERlbGhpIGFuZCBpdHMgc3Vycm91bmRpbmcgYXJlYS4gSW4gdGhpcyBzdHVkeSwgcmVzZWFyY2hlcnMgbG9va2VkIGF0IGRpZmZlcmVudCBhZ2UtZ3JvdXBzIG9mIGEgdG90YWwgb2YgMSwxODIgc3ViamVjdHMsIGFnZXMgcmFuZ2luZyBmcm9tIDcgdG8gNTkgeWVhcnMgb2xkLCBhbmQgaG93IHNldmVyYWwgYXNwZWN0cyBvZiB0aGVpciBsaXZlcyB3ZXJlIGFmZmVjdGVkIGFmdGVyIHRoZSBsb2NrZG93bi4gQWRkaXRpb25hbGx5LCB0aGV5IHJlY29yZGVkIHRoZSBkaWZmZXJlbnQgY29waW5nIG1lY2hhbmlzbXMgYWRvcHRlZCBkdWUgdG8gc3VjaCBzdWRkZW4gY2hhbmdlcy4gVGhlIHZhcmlvdXMgdmFyaWFibGVzIHN1Y2ggYXMgbGVhcm5pbmcgaG91cnMgZm9yIG9ubGluZSBjbGFzc2VzIGFuZCBzZWxmLXN0dWR5LCBkdXJhdGlvbiBvZiBzbGVlcCwgdGltZSBzcGVudCBvbiBmaXRuZXNzIGFuZCBzbGVlcCB3ZXJlIHJlY29yZGVkIGFuZCBhbmFseXNlZCBhcyBmYWN0b3JzIHJlbGF0ZWQgdG8gbWVudGFsIGhlYWx0aC4gQWx0aG91Z2ggdGhlIGVmZmVjdCBvbiBzdHVkZW50c+KAmSBlZHVjYXRpb24sIHNvY2lhbCBsaWZlLCBwaHlzaWNhbCBoZWFsdGgsIGFuZCBtZW50YWwgd2VsbC1iZWluZyB3YXMgZXhwZWN0ZWQsIHRoaXMgcmVzZWFyY2ggc3VnZ2VzdHMgdGhhdCB0aGUgcHVibGljIHNob3VsZCB0YWtlIG5lY2Vzc2FyeSBtZWFzdXJlcyB0byBwcmV2ZW50IHBzeWNob2xvZ2ljYWwgcHJvYmxlbXMgYW5kIGltcHJvdmUgc3R1ZGVudHPigJkgZXhwZXJpZW5jZXMgaW4gYW5kIG91dHNpZGUgb2YgYWNhZGVtaWNzLCBmb3Igb3VyIGN1cnJlbnQgcmVzdWx0cyBhcmUgbm90IG1lZXRpbmcgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgaW5pdGlhbCBnb3Zlcm5tZW50IHBvbGljaWVzLiBGb3Igc3BlY2lmaWMgZGV0YWlscyBvbiB0aGUgZGVtb2dyYXBoaWNzLCBvYmplY3RpdmVzLCBhbmQgbWV0aG9kcyBvZiB0aGlzIHN0dWR5LCBwbGVhc2UgcmVhZCB0aGUgcmVzZWFyY2ggcGFwZXIgbGlua2VkIFtoZXJlXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzM0NzkzNTc2OV9DT1ZJRC0xOV9hbmRfaXRzX2ltcGFjdF9vbl9lZHVjYXRpb25fc29jaWFsX2xpZmVfYW5kX21lbnRhbF9oZWFsdGhfb2Zfc3R1ZGVudHNfQV9TdXJ2ZXkpLiAKCkFsdGhvdWdoIHRoZSByZXNlYXJjaGVycyBpbiB0aGlzIHN0dWR5IGRpZCBhIHBoZW5vbWVuYWwgam9iIGF0IGNyZWF0aW5nLCBkZXNpZ25pbmcsIGFuZCBpbnRlcnByZXRpbmcgdGhlaXIgb3duIHBsb3RzLCB3ZSBkZWNpZGVkIHRvIGFzayBkaWZmZXJlbnQgcXVlc3Rpb25zIGFuZCBleHBsb3JlIG91ciBvd24gaW50ZXJlc3RzIGJ5IHVzaW5nIHRoZSBzYW1lIGRhdGEgc2V0IHdoaWxlIHN0aWxsIGFja25vd2xlZGdpbmcgdGhlaXIgcmVtYXJrYWJsZSBmaW5kaW5ncy4gCgoKIyMjICoqRGVtb2dyYXBoaWNzOioqCgpCZWZvcmUgZXhwbG9yaW5nIHRoZSBkYXRhIHNldCwgaXQncyBpbXBvcnRhbnQgdG8gZmlyc3QgYWNrbm93bGVkZ2UgdGhhdCB0aGVyZSBpcyBpbmRlZWQgYSBkZW1vZ3JhcGhpYyBpbWJhbGFuY2UuIE9mIHRoZSAxLDE4MiByZXNwb25kZW50cywgdGhlIHJlc2VhcmNoIHBhcGVyIHN0YXRlcyB0aGF0IDg0LjMlIG9mIHRob3NlIHN1YmplY3RzIHdlcmUgNyB0byAyMiB5ZWFycyBvZiBhZ2Ugd2l0aCB0aGUgbWVhbiBhZ2UgYmVpbmcgMjAuMTYgeWVhcnMgb2xkLiBUaGlzIGJhciBwbG90IHZpc3VhbGx5IGRlbW9uc3RyYXRlcyB0aGF0IG1vc3Qgb2YgdGhlIGRhdGEgY29tZXMgZnJvbSBzY2hvb2wtYWdlIGNoaWxkcmVuIGFuZCB0ZWVuYWdlcnMuIFRoaXMgaW1iYWxhbmNlIGlzIHVuZGVyc3RhbmRhYmxlIGNvbnNpZGVyaW5nIHRoYXQgdGhlIGFpbSBvZiB0aGlzIHN0dWR5IHdhcyB0byByZXNlYXJjaCBDT1ZJRC0xOSBpbXBsaWNhdGlvbnMgb24gdGhlIGVkdWNhdGlvbiwgc29jaWFsIGxpZmUsIGFuZCBtZW50YWwgaGVhbHRoIG9mIHN0dWRlbnRzLiBIb3dldmVyLCBjb21wYXJpbmcgZGlmZmVyZW50IHZhcmlhYmxlcyBhY3Jvc3MgbXVsdGlwbGUgYWdlLWdyb3VwcyBnZXRzIHF1aXRlIGNvbXBsaWNhdGVkIGFuZCBjYW4gYmUgbWlzbGVhZGluZyBpZiBub3QgY2FyZWZ1bGx5IGV4YW1pbmVkLiAgIAoKCmBgYHtyfQojZGVtb2dyYXBoaWNzCmRhdGFzZXQgJT4lIAogIGNvdW50KEFnZUNhdCkgJT4lIAogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JSAKICBndChyb3duYW1lX2NvbCA9ICJBZ2VDYXQiKSU+JSAKICB0YWJfaGVhZGVyKCJSZXNwb25kZW50cyBieSBBZ2UgR3JvdXAiKSAlPiUgCiAgdGFiX3N0dWJoZWFkKGxhYmVsPSJBZ2UiKSAlPiUKICBmbXRfcGVyY2VudChjb2x1bW5zID0gdmFycyhwcm9wKSwgZGVjaW1hbHMgPSAzKSAlPiUgCiAgY29sc19sYWJlbChuID0gIlJlc3BvbmRlbnRzIiwgcHJvcD0iUHJvcG9ydGlvbiIpICU+JSAKICBzdW1tYXJ5X3Jvd3MoY29sdW1ucyA9IHZhcnMoQWdlQ2F0LCBuKSwKICAgIGZucyA9IGxpc3QoCiAgICAgIHRvdGFsID0gfnN1bSguLCBuYS5ybSA9IFRSVUUpKSxkZWNpbWFscyA9IDApCgoKZ2dwbG90bHkoZGF0YXNldCAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gQWdlKSkgKwogIGdlb21fYmFyKGZpbGwgPSAiI2U3ZDRlOCIsIGNvbG9yPSIjOTk3MGFiIikgKwogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIiIsIGJyZWFrcyA9IGMoNSwgMTAsIDE1LCAyMCwgMjUsIDMwLCAzNSwgNDAsIDQ1LCA1MCwgNTUsIDYwKSkgKwogIGxhYnModGl0bGUgPSAiTnVtYmVyIG9mIFN1cnZleSBSZXNwb25kZW50cyBieSBBZ2UiLCB4ID0gIkFnZSIsIHkgPSAiIikgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGxvdC50aXRsZS5wb3NpdGlvbj0gInBsb3QiLCAKICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpKQoKYGBgCgoKYGBge3J9CiNzcGFjZQpgYGAKICAKCkp1c3QgYXMgd2Ugb2JzZXJ2ZWQgd2l0aCB0aGUgcHJldmlvdXMgcGxvdCwgdGhlIG51bWJlciBvZiByZXNwb25kZW50cyBwZXIgcmVnaW9uIG9mIHJlc2lkZW5jZSBhbHNvIGRpZmZlcnMuIFRoaXMgcGxvdCBkaXNwbGF5cyB0aGF0IHRoZXJlIGlzIGluZGVlZCBxdWl0ZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBEZWxoaS1OQ1IgcmVzcG9uZGVudHMgYW5kIHJlc3BvbmRlbnRzIGxpdmluZyBvdXRzaWRlIG9mIHRoZSBEZWxoaS1OQ1IuIEFsdGhvdWdoIHRoZSBvbmxpbmUtc3VydmV5IHdhcyBvcmlnaW5hbGx5IGFpbWVkIGF0IGluc3RpdHV0aW9ucyB3aXRoaW4gdGhlIERlbGhpLU5DUiByZWdpb24sIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIHJlc3BvbnNlcyBmcm9tIG91dHNpZGUgb2YgRGVsaGktTkNSIHdhcyByZWNlaXZlZCwgZm9yIGRpc3RhbmNlLWxlYXJuaW5nIHJlZ3VsYXRpb25zIGZvcmNlZCBtYW55IHN0dWRlbnRzIHRvIG1vdmUgb3V0IG9mIGhvbWVzIGFuZCBpbnN0aXR1dGlvbnMgdG8gcmVzaWRlIGVsc2V3aGVyZS4gT2YgdGhlIHRvdGFsIG51bWJlciBvZiByZXNwb25kZW50cywgMzguMyUgd2VyZSBsaXZpbmcgb3V0c2lkZSBvZiB0aGUgRGVsaGktTkNSLgoKYGBge3J9CiNzcGFjZQpgYGAKCgpgYGB7cn0KI2RlbW9ncmFwaGljcwpnZ3Bsb3RseShkYXRhc2V0ICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBSZWdpb24pKSArCiAgZ2VvbV9iYXIoZmlsbCA9ICIjZTdkNGU4IikgKwogIGxhYnModGl0bGUgPSAiTnVtYmVyIG9mIFN1cnZleSBSZXNwb25kZW50cyBieSBSZWdpb24iLCB4ID0gIiIsIHkgPSAiIikgKwogIHRoZW1lKHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb249ICJwbG90IiwgCiAgICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF9ibGFuaygpKSkKICAgIApgYGAKCgoKClRoaXMgcGxvdCBjb21wYXJlcyB0aGUgbWVkaWFuIG51bWJlciBvZiBob3VycyBzcGVudCBpbiBjbGFzcyBieSBkaWZmZXJlbnQgYWdlIGdyb3Vwcy4gRm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgdGhpcyBzdHVkeSwgaXQgaXMgaW1wb3J0YW50IHRvIGRyYXcgYXR0ZW50aW9uIHRvIGhvdyBtYW55IGhvdXJzIHN0dWRlbnRzIGFyZSBzcGVuZGluZyBzaXR0aW5nIGluIGZyb250IG9mIGEgc2NyZWVuIGVhY2ggZGF5LiBGcm9tIHRoaXMgcGxvdCwgd2UgY2FuIG9ic2VydmUgdGhhdCByZXNwb25kZW50cyB3aXRoaW4gdGhlIDctMTMgYW5kIDE0LTE4IGFnZS1ncm91cHMgc3BlbmQgdGhlIG1vc3QgdGltZSBpbiBjbGFzcyBwZXIgZGF5LiBUaGUgcmVzZWFyY2hlcnMgZW1waGFzaXplZCB0aGF0IGRpZmZlcmVudCB2YXJpYWJsZXMgKHRpbWUgc3BlbnQgb24gb25saW5lIGNsYXNzLCBzZWxmLXN0dWR5LGZpdG5lc3MsIHNsZWVwLCBhbmQgc29jaWFsIG1lZGlhKSBjaGFuZ2VzIHdpdGggZGlmZmVyZW50IGFnZSBkaXN0cmlidXRpb25zLiBBdmVyYWdlIHRpbWUgc3BlbnQgaW4gY2xhc3MgYW5kIGFnZS1ncm91cCB3YXMgb25lIG9mIHRoZSByZWxhdGlvbnNoaXBzIHRoYXQgd2VyZSBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsOyBBcyBhZ2UtZ3JvdXAgdmFsdWUgaW5jcmVhc2VzLCB0aGUgYXZlcmFnZSBudW1iZXIgb2YgaG91cnMgc3BlbnQgb25saW5lIHN0YXJ0cyB0byBkZWNyZWFzZS4gCgpgYGB7cn0KCmBgYAoKCmBgYHtyfQpkYXRhc2V0ICU+JQogIGdyb3VwX2J5KEFnZUNhdCwgQ29ubmVjdGlvbiwgUmVnaW9uKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gQWdlQ2F0LAogICAgICAgICAgICAgeSA9IE9ubGluZUNsYXNzKSkgKwogIGdlb21fYm94cGxvdChmaWxsID0gIiNjMmE1Y2YiLCBjb2xvciA9ICIjNzYyYTgzIiwgYWxwaGEgPSAuNSkgKwogIGxhYnMoeCA9ICJBZ2UiLCAKICAgICAgIHkgPSAiIiwgCiAgICAgICB0aXRsZSA9ICJDb21wYXJpbmcgSG91cnMgU3BlbnQgaW4gQ2xhc3MgUGVyIERheSBieSBBZ2UiLCBjb2wgPSAiZ3JleSIpICsKICB0aGVtZShwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIsIAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkKICAgICAgICAjIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAibWlkbmlnaHRibHVlIikpCgpgYGAKCgoKIyMjICoqU29jaWFsIE1lZGlhIFVzZSwgU2xlZXAgYW5kIE1lbnRhbCBIZWFsdGggT3V0Y29tZXM6KioKCgpJbiBhIHJlY2VudCBzdHVkeSBleGFtaW5pbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNsZWVwIGFuZCBtZW50YWwgaGVhbHRoIGFuZCBzbGVlcCBpbiBjb2xsZWdlIHN0dWRlbnRzLCByZXNlYXJjaGVycyBmb3VuZCB0aGF0IGRpZmZlcmVudCBtZW50YWwgaGVhbHRoIHN5bXB0b21zIGhhZCBkaWZmZXJlbnQgcGF0dGVybnMgb2YgYXNzb2NpYXRpb24gd2l0aCBwb29yIHNsZWVwLiBUaGV5IGZvdW5kIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gYW54aWV0eSBhbmQgZGVwcmVzc2lvbiBzeW1wdG9tcyBhbmQgc2xlZXAsIGJ1dCBmb3VuZCB0aGF0IG1lbnRhbCBoZWFsdGggY29uZGl0aW9ucyBvbmx5IGFmZmVjdGVkIGNlcnRhaW4gZWZmZWN0cyBvZiBwb29yIHNsZWVwLiBUaGlzIHN0dWR5IGFsc28gZW1waGFzaXplcyB0aGF0IHRoZSBlZmZlY3RzIG9mIHBvb3IgbWVudGFsIGhlYWx0aCBjb3VsZCBiZSBleGFjZXJiYXRlZCBieSBpbmFkZXF1YXRlIHNsZWVwaW5nIGhvdXJzIG9yIHBvb3Igc2xlZXAuIFByZXZpb3VzIHJlc2VhcmNoIGhhcyBzaG93biB0aGF0IGltcHJvdmluZyBzbGVlcCBmb3Igc3R1ZGVudHMgbWF5IGFsc28gaW1wcm92ZSBtb29kLiAoQmVja2VyIGV0IGFsLiwgMjAxOCkuIAoKCkEgY29ycmVsYXRpb25hbCBzdHVkeSBmcm9tIDIwMTggZXhhbWluZWQgdGhlIGFzc29jaWF0aW9uIG9mIG91dGNvbWVzIG9mIHNvY2lhbCBtZWRpYSB1c2UgaW4geW91bmcgYWR1bHRzIHN1Y2ggYXMgZ2VuZXJhbCBtZW50YWwgaGVhbHRoIHN5bXB0b21zLCBsb25lbGluZXNzLCBzdWljaWRhbCB0aG91Z2h0cywgYW5kIGEgY2hhbmdlIGluIGVtcGF0aHksIGFuZCBmb3VuZCB0aGF0IGNvbmNlcm5zIHJlZ2FyZGluZyBzb2NpYWwgbWVkaWEgdXNlIGluIHlvdW5nIGFkdWx0cyBtYXkgYmUgbWlzcGxhY2VkLiBUaG91Z2ggb3JnYW5pemF0aW9ucyBzdWNoIGFzIHRoZSBSb3lhbCBTb2NpZXR5IGZvciBwdWJsaWMgaGVhbHRoIGhhdmUgcmVwb3J0ZWQgZXZpZGVuY2UgZm9yIGxpbmtzIGJldHdlZW4gc29jaWFsIG1lZGlhIHVzZSBhbmQgcG9vciBtZW50YWwgaGVhbHRoLCB0aGlzIHBhcnRpY3VsYXIgc3R1ZHkgZGlkIG5vdCBmaW5kIHByb29mIG9mIGFuIGFzc29jaWF0aW9uLiBUaGlzIHN0dWR5IHBvaW50ZWQgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdXNlIG9mIHNvY2lhbCBtZWRpYSBvbiBtZW50YWwgaGVhbHRoIGVmZmVjdHMuIElmIHNvY2lhbCBtZWRpYSB3YXMgdXNlZCBmb3IgbmVnYXRpdmUgc29jaWFsIGNvbXBhcmlzb24gdGhpcyBjb3VsZCBsZWFkIHRvIGRlcHJlc3Npb24sIGJ1dCB0aGF0IGF1dGhlbnRpYyBzZWxmLXByZXNlbnRhdGlvbiBjb3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggcG9zaXRpdmUgbWVudGFsIGhlYWx0aCBlZmZlY3RzLiBUaGUgMjAxOCBzdHVkeSBhbHNvIHN0YXRlZCB0aGF0IHRpbWUgc3BlbnQgd2l0aCBzb2NpYWwgbWVkaWEgb3IgZXhwb3N1cmUgYWxvbmUgaXMgbm90IGEgZ29vZCBpbmRpY2F0b3Igb2YgbWVudGFsIGhlYWx0aCwgYnV0IGluc3RlYWQgdGhhdCBob3cgdGhlIHRpbWUgd2FzIHNwZW50IGlzIGJldHRlciBmb3IgYW5hbHlzaXMgYW5kIGlkZW50aWZ5aW5nIHByb2JsZW1zIChCZXJyeW1hbiwgRmVyZ3Vzb24sIGFuZCBOZWd5LCAyMDE4KS4gCgpJbiB0aGUgZ3JhcGggYmVsb3cgd2Ugc2VlayB0byBleGFtaW5lIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBiZXR3ZWVuIHRpbWUgc3BlbnQgb24gc29jaWFsIG1lZGlhIHBlciB3ZWVrIGFuZCB0aW1lIHNwZW50IHNsZWVwaW5nIHBlciB3ZWVrIGFzIGluZGljYXRvcnMgZm9yIG1lbnRhbCBoZWFsdGguIER1ZSB0byB0aGUgZmFjdCB0aGF0IHNsZWVwIGRpc3R1cmJhbmNlIGNhbiBvZnRlbiBiZSBhbiBpbmRpY2F0b3Igb3IgYXNzb2NpYXRpb24gd2l0aCBwb29yIG1lbnRhbCBoZWFsdGggb3V0Y29tZXMsIHdlIGNob3NlIHRvIGV4YW1pbmUgaG93IHRoZXNlIHR3byB2YXJpYWJsZXMgaW50ZXJhY3RlZCwgYW5kIHRvIHNlZSBpZiB0aGlzIGRpZmZlcmVkIGJ5IGFnZS4KCgpgYGB7ciwgZXZhbD1GQUxTRX0Kc2xlZXBtZWRpYV9hbmltIDwtIGRhdGFzZXQgJT4lIAogIGdyb3VwX2J5KFNvY2lhbE1lZGlhLCBhdmdzbGVlcCwgQWdlQ2F0LCBTbGVlcCkgJT4lCiAgc3VtbWFyaXNlKGF2Z21lZGlhID0gbWVhbihTb2NpYWxNZWRpYSkpICU+JQogIGdncGxvdChhZXMoeCA9IFNsZWVwLCAKICAgICAgICAgICAgIHkgPSBTb2NpYWxNZWRpYSwgCiAgICAgICAgICAgICBjb2xvciA9IEFnZUNhdCwgCiAgICAgICAgICAgICBncm91cCA9IEFnZUNhdCkpICsKICBnZW9tX2ppdHRlcigpICsKICBsYWJzKHkgPSAiSG91cnMgb2YgU29jaWFsIE1lZGlhIFVzZSIsIAogICAgICAgeCA9ICJIb3VycyBvZiBTbGVlcCIsIAogICAgICAgdGl0bGUgPSAiQW1vdW50IG9mIFNsZWVwIGFuZCBDb3JyZXNwb25kaW5nIFNvY2lhbCBNZWRpYSBVc2UgaW4gSG91cnMgYnkgQWdlIENhdGVnb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJBZ2VzOiB7Y2xvc2VzdF9zdGF0ZX0iKSArCiAgdHJhbnNpdGlvbl9zdGF0ZXMoQWdlQ2F0KSsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb249ICJwbG90IiwgCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiUFJHbiIpICsKICBleGl0X2ZhZGUoKSArCiAgZW50ZXJfcmVjb2xvcihjb2xvciA9ICJhbGljZWJsdWUiKSArCiAgZXhpdF9yZWNvbG9yKGNvbG9yID0gImFsaWNlYmx1ZSIpCgphbmltYXRlKHNsZWVwbWVkaWFfYW5pbSwgZHVyYXRpb24gPSAyMCkKCmFuaW1fc2F2ZSgic2xlZXBtZWRpYV9hbmltLmdpZiIpCmBgYAoKYGBge3J9CgpgYGAKCmBgYHtyfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygic2xlZXBtZWRpYV9hbmltLmdpZiIpCmBgYAoKCmBgYHtyfQoKYGBgCgoKCkZvciBtb3N0IG9mIHRoZSBhZ2UgY2F0ZWdvcmllcyB0aGVyZSBtYXkgYmUgYSBzbGlnaHQgbmVnYXRpdmUgYXNzb2NpYXRpb24gYmV0d2VlbiBob3VycyBvZiBzbGVlcCBhbmQgaG91cnMgb2Ygc29jaWFsIG1lZGlhIHVzZS4gSXQgYXBwZWFycyB0aGF0IHdoaWxlIGhvdXJzIG9mIHNsZWVwIGdvIHVwLCBob3VycyBvZiBzb2NpYWwgbWVkaWEgdXNlIG1heSBzbGlnaHRseSBnbyBkb3duLiBGb3IgdGhlIGFnZSBjYXRlZ29yeSAxOSB5ZWFycyAtIDIzIHllYXJzLCB0aGVyZSBhcHBlYXJzIHRvIGJlIG5vIGFzc29jaWF0aW9uIGF0IGFsbCBiZXR3ZWVuIGFtb3VudCBvZiBzbGVlcCBhbmQgYW1vdW50IG9mIHNvY2lhbCBtZWRpYSB1c2UuIEluIGFkZGl0aW9uLCB0aGUgYXNzb2NpYXRpb24gaXMgbm90IGNsZWFyIGZvciBhbnkgYWdlIGdyb3VwLCBsZWFkaW5nIHVzIHRvIGJlbGlldmUgdGhhdCB0aGUgcmVzdWx0cyBmcm9tIHRoZSBDT1ZJRC0xOSBkYXRhc2V0IHRoYXQgd2UgYXJlIHVzaW5nIG1vc3QgbGlrZWx5IGZvbGxvdyB0aGUgdHJuZCB0aGF0IHRoZSAyMDE4IHN0dWR5IGJ5IEJlcnJ5bWFuLCBGZXJndXNvbiwgYW5kIE5lZ3kgc3VnZ2VzdGVkLCB3aGljaCBpcyB0aGF0IHRoZXJlIGlzIGxpbWl0ZWQgcHJvb2YgYmV0d2VlbiBzb2NpYWwgbWVkaWEgYW5kIG1lbnRhbCBoZWFsdGggZWZmZWN0cy4gSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBkaWZmZXJlbmNlIGluIGFtb3VudCBvZiB0aW1lIHNsZWVwaW5nIGlzIG5vdCB0aGUgYmVzdCBpbmRpY2F0b3Igb2YgbWVudGFsIGhlYWx0aCBvdXRjb21lcywgYW5kIGFub3RoZXIgbWVhc3VyZW1lbnQgbGlrZSBhbiBpbmNyZWFzZSBhbnhpZXR5IG9yIGRlcHJlc3Npb24gc3ltcHRvbXMgbWF5IGJlIGEgYmV0dGVyIGluZGljYXRvciB0aGF0IHdhcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEgc2V0IHRoYXQgd2UgdXNlZC4KCmBgYHtyfQoKYGBgCgoKCmBgYHtyfQoKZGF0YXNldCAlPiUgCiAgc2VsZWN0KEFnZUNhdCwgU29jaWFsTWVkaWEsIENvbm5lY3Rpb24pICU+JSAKICBncm91cF9ieShBZ2VDYXQsIENvbm5lY3Rpb24pICU+JSAKICBzdW1tYXJpemUoYXZnX3RpbWVfc20gPSBtZWFuKFNvY2lhbE1lZGlhKSkgJT4lIAogIGdncGxvdChhZXMoeCA9IEFnZUNhdCwgeSA9IGF2Z190aW1lX3NtLAogICAgICAgICAgICAgZmlsbCA9IENvbm5lY3Rpb24pKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzk5NzBhYiIsIiM1YWFlNjEiKSkgKwogICNnZW9tX2JveHBsb3QoKSArCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIEhvdXJzIFNwZW50IE9uIFNvY2lhbCBNZWRpYSBhbmQgQ29ubmVjdGlvbiBXaXRoIExvdmVkIE9uZXMgUGVyIEFnZSBHcm91cCIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIiIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIsCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCiAKYGBgCgpXaXRoIHRoZSBwYW5kZW1pYywgc3R1ZGVudHMgYXJlIGZvcmNlZCB0byBxdWFyYW50aW5lIGF0IGhvbWUgd2hpY2ggcmVzdWx0cyBpbiBsZXNzIGZhY2UtdG8tZmFjZSBpbnRlcmFjdGlvbnMgYW5kIG1vcmUgdGltZSBvbiBzb2NpYWwgbWVkaWEgKGlmIGl0J3MgYWNjZXNzaWJsZSB0byB0aGVtKS4gSW4gdGhlIGdyYXBoIGJlbG93LCB3ZSB1c2VkIHRoZSBkYXRhIHNldCB0byBzZWUgaWYgdGhlcmUgaXMgYSBzdHJvbmcgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGF2ZXJhZ2UgdGltZSBzcGVudCBvbiBzb2NpYWwgbWVkaWEgcGVyIGRheSBhbmQgd2hldGhlciBvciBub3QgdGhleSBmZWVsIGNvbm5lY3RlZCB0byB0aGVpciBsb3ZlZCBvbmVzLiBJbnRlcmVzdGluZ2x5LCB0aGUgcGxvdCBzaG93cyB0aGF0IGJldHdlZW4gdGhlIGRpZmZlcmVudCBhZ2UgZ3JvdXBzLCB0aGUgcmVzdWx0cyB2YXJ5LCBhbmQgdGhlIGF2ZXJhZ2UgdGltZSBzcGVudCBvbiBzb2NpYWwgbWVkaWEgZG9lcyBub3QgZXhhY3RseSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBjb25uZWN0aW9uIHdpdGggbG92ZWQgb25lcy4gVGhpcyBjYW4gZGVtb25zdHJhdGUgdGhhdCB0aGUgY29ubmVjdGlvbnMgbWFkZSB3aXRoIGxvdmVkIG9uZXMgZG8gbm90IG1lcmVseSBjb21lIGZyb20gc29jaWFsIG1lZGlhIGludGVyYWN0aW9ucywgbm9yIGFyZSB0aGV5IGEgcmVzdWx0IG9mIGhhdmluZyB0byBzdGF5IGhvbWUgd2l0aCBsb3ZlZCBvbmVzIGV2ZXJ5ZGF5LiBJbmRlZWQsIHRoYXQgY29ubmVjdGlvbiBjYW4gYmUgYSByZXN1bHQgb2YgYW55dGhpbmcgZGVwZW5kaW5nIG9uIHRoZSBpbmRpdmlkdWFsLgoKCiMjIyAqKk91dGNvbWVzIGFuZCBFZmZlY3RzIG9mIENPVklELTE5OioqCgpgYGB7cn0KCmBgYAoKCmBgYHtyfQpkYXRhc2V0ICU+JQogIGRyb3BfbmEoKSAlPiUgCiAgbXV0YXRlKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgID0gZmN0X2x1bXBfbihgV2hhdCB5b3UgbWlzcyB0aGUgbW9zdGAsIDUpKSAlPiUKICAjZmlsdGVyKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgICE9ICJPdGhlciIpICAlPiUKICBjb3VudChgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCwgc29ydD1UUlVFKSAlPiUgCiAgZ3Qocm93bmFtZV9jb2wgPSAiYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAiKSU+JSAKICB0YWJfaGVhZGVyKCJXaGF0IFJlc3BvbmRlbnRzIE1pc3MgTW9zdCIpICU+JSAKICBjb2xzX2xhYmVsKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgPSIiLAogICAgICAgICAgICAgbiA9ICIiKQpgYGAKCmBgYHtyfQoKYGBgCgoKV2Ugd2VyZSBpbnRlcmVzdGVkIHRvIGV4YW1pbmUgd2hhdCB0aGUgc3VydmV5IHJlc3BvbmRlbnRzIG1pc3NlZCB0aGUgbW9zdCBkdXJpbmcgdGhlIENPVklELTE5IHBhbmRlbWljLCBhbmQgZm91bmQgdGhhdCB0aHJvdWdob3V0IHRoZSBtYW55IHN1cnZleSByZXNwb25zZXMsIGVhdGluZyBvdXRzaWRlLCBmcmllbmRzIGFuZCByZWxhdGl2ZXMsIHJvYW1pbmcgYXJvdW5kIGZyZWVseSwgc2Nob29sL2NvbGxlZ2UsICBhbmQgdHJhdmVsaW5nIHdlcmUgdGhlIG1vc3QgY29tbW9uIHJlc3BvbnNlcyB0byB0aGUgcXVlc3Rpb24gIldoYXQgZG8geW91IG1pc3MgdGhlIG1vc3Q/Ii4gV2Ugb2JzZXJ2ZWQgdGhhdCBtb3N0IHRoZSBtb3N0IGNvbW1vbiByZXNwb25zZXMgd2VyZSBhbHNvIHdoYXQgd2UsIGFzIGNvbGxlZ2Ugc3R1ZGVudHMsICBtaXNzZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuIEl0IHdhcyBpbnRlcmVzdGluZyB0aGF0IHNjaG9vbCBhbmQvb3IgY29sbGVnZSB3YXMgdGhlIG1vc3QgY29tbW9uIGFuc3dlciwgYnV0IHRoaXMgYW5zd2VyIG1ha2VzIHNlbnNlIHdoZW4gY29uc2lkZXJpbmcgdGhlIGRlbW9ncmFwaGljcyBvZiB0aGUgcmVzcG9uc2VzIGFuZCB0aGUgbW9zdCBjb21tb24gYWdlcyBmb3IgcmVzcG9uc2UsIHdoaWNoIHdhcyBzY2hvb2wgYW5kIGNvbGxlZ2UgYWdlZCBwZW9wbGUuIAoKYGBge3J9CgpgYGAKCgpgYGB7cn0KZGF0YXNldCAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBtdXRhdGUoYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAgPSBmY3RfbHVtcF9uKGBXaGF0IHlvdSBtaXNzIHRoZSBtb3N0YCwgNSkpICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2Jhcihwb3NpdGlvbj0iZG9kZ2UiLCBhZXMoeD1BZ2VDYXQsIGZpbGw9UmVnaW9uKSkrCiAgZmFjZXRfd3JhcCh2YXJzKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiM5OTcwYWIiLCIjNWFhZTYxIikpICsKICBsYWJzKAogICAgdGl0bGUgPSAiV2hhdCBSZXNwb25kZW50cyBNaXNzIE1vc3QgYnkgQWdlIEdyb3VwCiAgICA8c3BhbiBzdHlsZT0nY29sb3I6Izk5NzBhYjsnPmluIERlaGxpPC9zcGFuPgogICAgPHNwYW4+YW5kIAogICAgPHNwYW4gc3R5bGU9J2NvbG9yOiM1YWFlNjE7Jz5PdXRzaWRlIERlaGxpPC9zcGFuPiIsCiAgICB4ID0gIkFnZSBHcm91cCIsIHkgPSAiIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIpCmBgYAoKYGBge3J9CgpgYGAKCgpgYGB7cn0KI3dpdGhpbiBBZ2VDYXQ9Ny0xMywgd2hhdCBwZXJjZW50YWdlIHNhaWQgd2hhdDoKYWcxIDwtIGRhdGFzZXQgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgbXV0YXRlKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgID0gZmN0X2x1bXBfbihgV2hhdCB5b3UgbWlzcyB0aGUgbW9zdGAsIDUpKSAlPiUgCiAgZmlsdGVyKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgICE9ICJPdGhlciIpICAlPiUKICBmaWx0ZXIoQWdlQ2F0PT0iNy0xMyIpICU+JQogIGdyb3VwX2J5KEFnZUNhdCxgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCkgJT4lIAogIGNvdW50KHNvcnQ9VFJVRSkgICU+JQogIG11dGF0ZShwcm9wPW4vODkqMTAwKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9jb2wocG9zaXRpb249ImRvZGdlIiwgYWVzKHg9YFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAsIHk9cHJvcCksIGZpbGw9IiM3NjJhODMiKSArCiAgbGFicyh4ID0gIiIsIAogICAgICAgeSA9ICIiLCAKICAgICAgIHRpdGxlID0gIkFnZXMgNy0xMyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIpCgojd2l0aGluIEFnZUNhdD0xNC0xOCwgd2hhdCBwZXJjZW50YWdlIHNhaWQgd2hhdDoKYWcyIDwtIGRhdGFzZXQgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgbXV0YXRlKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgID0gZmN0X2x1bXBfbihgV2hhdCB5b3UgbWlzcyB0aGUgbW9zdGAsIDUpKSAlPiUKICBmaWx0ZXIoYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAgIT0gIk90aGVyIikgICU+JQogIGZpbHRlcihBZ2VDYXQ9PSIxNC0xOCIpICU+JQogIGdyb3VwX2J5KEFnZUNhdCxgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCkgJT4lIAogIGNvdW50KHNvcnQ9VFJVRSkgICU+JQogIG11dGF0ZShwcm9wPW4vMjY1KjEwMCkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fY29sKHBvc2l0aW9uPSJkb2RnZSIsIGFlcyh4PWBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgLCB5PXByb3ApLCBmaWxsPSIjOTk3MGFiIikgKwogIGxhYnMoeCA9ICIiLCAKICAgICAgIHkgPSAiIiwgCiAgICAgICB0aXRsZSA9ICJBZ2VzIDE0LTE4IikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb249ICJwbG90IikKCiN3aXRoaW4gQWdlQ2F0PTE5LTIzLCB3aGF0IHBlcmNlbnRhZ2Ugc2FpZCB3aGF0OgphZzMgPC0gZGF0YXNldCAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBtdXRhdGUoYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAgPSBmY3RfbHVtcF9uKGBXaGF0IHlvdSBtaXNzIHRoZSBtb3N0YCwgNSkpICU+JQogIGZpbHRlcihgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCAhPSAiT3RoZXIiKSAgJT4lCiAgZmlsdGVyKEFnZUNhdD09IjE5LTIzIikgJT4lCiAgZ3JvdXBfYnkoQWdlQ2F0LGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgKSAlPiUgCiAgY291bnQoc29ydD1UUlVFKSAgJT4lCiAgbXV0YXRlKHByb3A9bi82NDUqMTAwKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9jb2wocG9zaXRpb249ImRvZGdlIiwgYWVzKHg9YFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAsIHk9cHJvcCksIGZpbGw9IiNjMmE1Y2YiKSArCiAgbGFicyh4ID0gIiIsIAogICAgICAgeSA9ICIiLCAKICAgICAgIHRpdGxlID0gIkFnZXMgMTktMjMiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGxvdC50aXRsZS5wb3NpdGlvbj0gInBsb3QiKQoKI3dpdGhpbiBBZ2VDYXQ9MjQtMzMsIHdoYXQgcGVyY2VudGFnZSBzYWlkIHdoYXQ6CmFnNCA8LSBkYXRhc2V0ICU+JSAKICBkcm9wX25hKCkgJT4lIAogIG11dGF0ZShgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCA9IGZjdF9sdW1wX24oYFdoYXQgeW91IG1pc3MgdGhlIG1vc3RgLCA1KSkgJT4lCiAgZmlsdGVyKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgICE9ICJPdGhlciIpICAlPiUKICBmaWx0ZXIoQWdlQ2F0PT0iMjQtMzMiKSAlPiUKICBncm91cF9ieShBZ2VDYXQsYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGApICU+JSAKICBjb3VudChzb3J0PVRSVUUpICAlPiUKICBtdXRhdGUocHJvcD1uLzg0KjEwMCkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fY29sKHBvc2l0aW9uPSJkb2RnZSIsIGFlcyh4PWBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgLCB5PXByb3ApLCBmaWxsPSIjYTZkYmEwIikgKwogIGxhYnMoeCA9ICIiLCAKICAgICAgIHkgPSAiIiwgCiAgICAgICB0aXRsZSA9ICJBZ2VzIDI0LTMzIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb249ICJwbG90IikKCiN3aXRoaW4gQWdlQ2F0PTM0LTQ1LCB3aGF0IHBlcmNlbnRhZ2Ugc2FpZCB3aGF0OgphZzUgPC0gZGF0YXNldCAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBtdXRhdGUoYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAgPSBmY3RfbHVtcF9uKGBXaGF0IHlvdSBtaXNzIHRoZSBtb3N0YCwgNSkpICU+JQogIGZpbHRlcihgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCAhPSAiT3RoZXIiKSAgJT4lCiAgZmlsdGVyKEFnZUNhdD09IjM0LTQ1IikgJT4lCiAgZ3JvdXBfYnkoQWdlQ2F0LGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgKSAlPiUgCiAgY291bnQoc29ydD1UUlVFKSAgJT4lCiAgbXV0YXRlKHByb3A9bi80MioxMDApICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2NvbChwb3NpdGlvbj0iZG9kZ2UiLCBhZXMoeD1gV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCwgeT1wcm9wKSwgZmlsbD0iIzVhYWU2MSIpICsKICBsYWJzKHggPSAiIiwgCiAgICAgICB5ID0gIiIsIAogICAgICAgdGl0bGUgPSAiQWdlcyAzNC00NSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIpCgojd2l0aGluIEFnZUNhdD00Ni02MCwgd2hhdCBwZXJjZW50YWdlIHNhaWQgd2hhdDoKYWc2IDwtIGRhdGFzZXQgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgbXV0YXRlKGBXaGF0IHJlc3BvbmRlbnRzIG1pc3MgdGhlIG1vc3RgID0gZmN0X2x1bXBfbihgV2hhdCB5b3UgbWlzcyB0aGUgbW9zdGAsIDUpKSAlPiUKICBmaWx0ZXIoYFdoYXQgcmVzcG9uZGVudHMgbWlzcyB0aGUgbW9zdGAgIT0gIk90aGVyIikgICU+JQogIGZpbHRlcihBZ2VDYXQ9PSI0Ni01OSIpICU+JQogIGdyb3VwX2J5KEFnZUNhdCxgV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCkgJT4lIAogIGNvdW50KHNvcnQ9VFJVRSkgICU+JQogIG11dGF0ZShwcm9wPW4vNCoxMDApICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2NvbChwb3NpdGlvbj0iZG9kZ2UiLCBhZXMoeD1gV2hhdCByZXNwb25kZW50cyBtaXNzIHRoZSBtb3N0YCwgeT1wcm9wKSwgZmlsbD0iIzFiNzgzNyIpICsKICBsYWJzKHggPSAiIiwgCiAgICAgICB5ID0gIiIsIAogICAgICAgdGl0bGUgPSAiQWdlcyA0Ni01OSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uPSAicGxvdCIpCmBgYAoKCmBgYHtyLCBmaWcud2lkdGg9MTMsIGZpZy5oZWlnaHQ9MTF9CiNwYWN0aCB0b2dldGhlciBncmFwaHMsIGhhdmUgdGhlIG1lc3MgYXJvdW5kIHdpdGggdGhlIHNpemUgd2hlbiBrbml0dGluZyB0byBtYWtlIGl0IHJlYWRhYmxlLCB3ZSBjYW4gYWxzbyBtYWtlIGl0IGxlc3MgY2F0ZWdvcmllcyBpZiB3ZSB3YW50CihhZzF8YWcyKSAvIChhZzN8YWc0KSAvIChhZzUgfGFnNikgKwogIHBsb3RfYW5ub3RhdGlvbigiV2hhdCBSZXNwb25kZW50cyBNaXNzIHRoZSBNb3N0OiBQcm9wb3J0aW9uYWxseSBieSBBZ2UgR3JvdXAiKQpgYGAKCgoKIyMgKipDb25jbHVzaW9uKioKCi1wZXJzb25hbCBleHBlcmllbmNlcyAtLT4gTWF5YSB3cm90ZSBzb21lIGFib3ZlIFdoYXQgeW91IG1pc3MgdGhlIG1vc3QgIAotY29ubmVjdCBVUyBhbmQgSW5kaWE=